/**
 * @param {number[]} nums
 * @return {number[][]}
 */
// 回溯
var subsets = function(nums) {

    // 返回最终的结果
    let result = []
    backtrack(0, [])
    return result

    function backtrack(index, track) {
        // 越界的情况-- 结束的条件
        if (index == nums.length) {
            result.push([...track])
            return
        }

        track.push(nums[index]) // 选择这个数
        backtrack(index + 1, track) // 下一个数字
        // 弹出
        track.pop()
        // 不选择
        backtrack(index + 1, track)
    }
}

var subsets = function(nums) {
    /*
    不用设置边界条件 知道选择完一个 结束递归
    * */
    // 返回最终的结果
    let result = []
    backtrack(0, [])
    return result

    function backtrack(index, track) {
        result.push([...track])
        for (let i = index; i < nums.length; i++) {
            track.push(nums[i])
            backtrack(i + 1, track)
            track.pop()
        }
    }
}
let nums = [1,2,3]
console.log(subsets(nums))